package top.jlzhou.tools.sms;

import java.util.HashMap;
import java.util.Map;
import java.util.Timer;
import java.util.TimerTask;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * <pre>短信验证码缓存的默认实现</pre>
 * @ClassName	top.jlzhou.tools.sms.SmsCacheServiceDefaultImpl
 * @author	J.L.Zhou
 * @date	2019年3月9日 下午6:52:43
 * @version 	V1.0
 * @Copyright	2019 jlzhou.top Inc. All rights reserved. 
 * 	注意：本内容仅限于公司内部传阅，禁止外泄以及用于其他的商业目
 */
public class SmsCacheServiceDefaultImpl implements SmsCacheService {
	
	private Logger logger = LoggerFactory.getLogger(SmsCacheServiceDefaultImpl.class);
	
	/**
	 * 存放缓存数据
	 */
	private Map<String, String> cacheMap = java.util.Collections.synchronizedMap(new HashMap<String,String>());
	/**
	 * 缓存超时60秒
	 */
	private int timeout = 60;

	/**
	 * 定时器
	 */
	private Timer timer = new Timer();
	@Override
	public void push(String tel, String code) {
		cacheMap.put(tel, code);
		logger.debug("将手机[{}]验证码[{}]加入缓存",tel,code);
		timer.schedule(new TimerTask() {
			@Override
			public void run() {
				cacheMap.remove(tel);
				logger.debug("移除手机[{}]验证码缓存",tel);
			}
		}, timeout*1000);
		
	}
	
	@Override
	public String get(String tel) {
		logger.debug("获取手机[{}]的验证码", tel);
		return cacheMap.get(tel);
	}

	/**
	 * 设置缓存超时，默认60秒
	 * @param timeout 超时（秒）
	 */
	public void setTimeout(int timeout) {
		logger.debug("设置验证码缓存超时：[{}]",timeout);
		this.timeout = timeout;
	}

	
	
	
}
